/**
 * 步骤一：main.js 执行 Sensors._init
 * 步骤二：登录之后 执行 Sensors._update
 * 步骤三：指定事件统计 执行 Sensors._stat
 */
import Conf from '@config'
import Util from './util'
import Cache from './cache'
const Sensors = sensorsDataAnalytic201505

const _init = () => {
    Sensors.init({
        server_url: Util.env.isProd() ? 'https://tj.more-health.cn/tj.gif' : 'https://tjtest.more-health.cn/tj.gif',
        is_track_single_page: true, // 单页面配置，默认开启，若页面中有锚点设计，需要将该配置删除，否则触发锚点会多触发 $pageview 事件
        use_client_time: true,
        send_type: 'beacon',
        show_log: false, //设置 true 后会在网页控制台打 logger，会显示发送的数据,设置 false 表示不显示。	
        heatmap: {
            //是否开启点击图，default 表示开启，自动采集 $WebClick 事件，可以设置 'not_collect' 表示关闭。
            clickmap: 'default',
            //是否开启触达注意力图，not_collect 表示关闭，不会自动采集 $WebStay 事件，可以设置 'default' 表示开启。
            scroll_notice_map: 'default',
            //停留时长  4s 可按需修改
            scroll_delay_time: 4000,
            collect_element: function (element_target) {
                // 如果这个元素有属性sensors-disable=true时候，不采集。
                if (element_target.getAttribute('sensors-disable') === 'true') {
                    return false;
                } else {
                    return true;
                }
            },
            custom_property: function (element_target) {
                //比如您需要给有 data=special 属性的标签的点击事件增加自定义属性 name:'aa' ，则代码如下：
                if (element_target.getAttribute('data') === 'special') {
                    return {
                        itemId: '12345'
                    }
                }
            },
        }
    })
    _reg()
}

const _reg = () => {
    let user = Cache.user.get();
    Sensors.registerPage({
        app_id: Conf.tracker.appid,
        statistics_app_id: Conf.tracker.statistics_app_id,
        profile_id: user.profile_id ||  user.cp_profile_id || '',
        pn: Util.getSubject(Cache.subject),
        event_source:'mdlog'
    });
    log(1, 'tracker alive.');
}

const _update = () => {
    log(1, 'tracker update.');
    _reg();
}

/**
 * 事件统计
 * @param ev  --> event_id
 * @param name  --> 事件名称 
 * @param param  --> 额外参数
 * @returns 
 */
const _stat = (ev, name, param = {}) => {
    if (!ev || !name) {
        console.warn('统计缺失必要参数，请检查.');
        return;
    }
    Object.assign(param, name.includes('click') ? {
        element: name
    } : {
        view: name
    })
    Sensors.track(ev, param)
}

export default {
    _init,
    _reg,
    _update,
    _stat
}